#include <glib-object.h>

typedef struct _MyObject MyObject;
typedef struct _MyObjectClass MyObjectClass;

struct _MyObject {
    GObject parent_instance;
};

struct _MyObjectClass {
    GObjectClass parent_class;
};

G_DEFINE_TYPE(MyObject, my_object, G_TYPE_OBJECT)

static void my_object_class_init(MyObjectClass *klass) {
    // class initialization code goes here
}

static void my_object_init(MyObject *self) {
    // instance initialization code goes here
}

static void my_object_do_something(MyObject *self) {
    g_print("Hello World!\n");
}

int main(int argc, char **argv) {
    MyObject *my_object = g_object_new(MY_TYPE_OBJECT, NULL);
    my_object_do_something(my_object);
    return 0;
}
